home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / magazine / nan_news / toolkit / origin.asm < prev    next >
Assembly Source File  |  1991-08-15  |  3KB  |  124 lines

  1. ; File......: ORIGIN.ASM
  2. ; Author....: Steve Larsen
  3. ; CIS ID....: 76370,1532
  4. ; Date......: $Date:   15 Aug 1991 23:08:00  $
  5. ; Revision..: $Revision:   1.1  $
  6. ; Log file..: $Logfile:   E:/nanfor/src/origin.asv  $
  7. ;
  8. ; This is an original work by K. Stephan Larsen and is placed in
  9. ; the public domain.
  10. ;
  11. ; Modification history:
  12. ; ---------------------
  13. ;
  14. ; $Log:   E:/nanfor/src/origin.asv  $
  15. ;  
  16. ;     Rev 1.1   15 Aug 1991 23:08:00   GLENN
  17. ;  Forest Belt proofread/edited/cleaned up doc
  18. ;  
  19. ;     Rev 1.0   09 Jun 1991 00:40:16   GLENN
  20. ;  Initial revision.
  21. ;
  22.  
  23.  
  24.  
  25. ;
  26. ; $DOC$
  27. ; $FUNCNAME$
  28. ;    FT_ORIGIN()
  29. ; $CATEGORY$
  30. ;    Environment
  31. ; $ONELINER$
  32. ;    Report the drive, path and filename of the executing program
  33. ; $SYNTAX$
  34. ;    FT_ORIGIN() -> cString
  35. ; $ARGUMENTS$
  36. ;    None
  37. ; $RETURNS$
  38. ;    A string containing the full drive/directory/filename of
  39. ;    the currently executing file.
  40. ; $DESCRIPTION$
  41. ;    Often users will install multiple copies of application software,
  42. ;    especially on networks and in situations where the user is trying
  43. ;    to get around a copy protection scheme.
  44. ;
  45. ;    This function enables you to learn the name and source location 
  46. ;    of the currently executing file, so that you may take whatever
  47. ;    action you need to.
  48. ;
  49. ;    Requires DOS v3.xx and above.
  50. ; $EXAMPLES$
  51. ;    cMyFile := FT_ORIGIN()
  52. ;    
  53. ;    IF cMyFile <> "C:\APPDIR\MYFILE.EXE"
  54. ;       ?"Incorrect startup file.  Please remove/rename and start again"
  55. ;       QUIT
  56. ;    ENDIF
  57. ; $INCLUDE$
  58. ; $SEEALSO$
  59. ;    FT_WHEREIS() FT_TREE()
  60. ; $END$
  61. ;
  62.  
  63. TITLE ORIGIN.asm
  64.  
  65. PUBLIC FT_ORIGIN
  66.  
  67. EXTRN __retc:far
  68.  
  69. _NANFOR segment word public 'CODE'
  70.     ASSUME CS:_NANFOR
  71.  
  72. FT_ORIGIN       proc    far
  73.         push    ds              ; save Clipper's environment
  74.         push    es
  75.         push    di
  76.         push    si
  77.         push    bp
  78.         mov     bp, sp
  79.  
  80.         mov     ah, 62h         ; fetch segment address of PSP
  81.         int     21h
  82.         cld
  83.         mov     es, ax
  84.         mov     ax, es:[2Ch]    ; environment block seg is at PSP:2Ch
  85.         mov     es, ax          ; Env. Blk top in ES:DI, scan for 0000
  86.         xor     di, di
  87.         xor     ax, ax
  88.         mov     cx, 0FFFFh
  89. lf_1:   repne   scasb           ; scan for a null terminator
  90.         mov     bl, es:[di]     ; found one, now check for 2 nulls in a 
  91.         or      bl, bl          ;   row, means end of env. blk.
  92.         jnz     lf_1
  93.  
  94.         inc     di              ; now test for something, if there, that's
  95.         mov     ax, es:[di]     ;   our path.
  96.         or      ax, ax
  97.         jz      lf_2
  98.         inc     di              ; no path, point to a null
  99.         inc     di
  100.  
  101. lf_2:    push    es              ; save address of path for
  102.     push    di              ;  return to Clipper
  103.         pop     ax
  104.         pop     dx
  105.  
  106.         mov     sp, bp          ; housekeeping
  107.         pop     bp
  108.         pop     si
  109.         pop     di
  110.         pop     es
  111.         pop     ds
  112.  
  113.         push    dx              ; return path string to Clipper
  114.         push    ax
  115.  
  116.     call    __retc
  117.     add    sp,4
  118.  
  119.         ret
  120. FT_ORIGIN       endp
  121.  
  122. _NANFOR    ends
  123.     end
  124.